<!DOCTYPE html
	PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">
	<link rel="icon" href="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/favicon.ico">
	<title>Tools</title>
	<style>
		* {
			margin: 0;
			padding: 0;
		}

		.tp-content {
			width: 80%;
			max-width: 1000px;
			background: rgba(0, 0, 0, .1);
			border-radius: 100px;
			box-shadow: -2px -2px 2px rgb(138, 142, 161), -2px -2px 12px rgba(255, 255, 255, 0.5), inset 2px 2px 4px rgba(255, 255, 255, 0.1), 2px 2px 8px rgba(0, 0, 0, 0.15);
			position: fixed;
			left: 0;
			top: 25%;
			right: 0;
			margin: 0 auto;
			padding: 30px;
			box-sizing: border-box;
			display: flex;
			justify-content: center;
			flex-wrap: wrap;
		}

		.tp-content:hover {
			box-shadow: -2px -2px 4px rgba(255, 255, 255, 1), -2px -2px 14px rgba(255, 255, 255, 0.7), inset 2px 2px 6px rgba(255, 255, 255, 0.3), 2px 2px 10px rgba(0, 0, 0, 0.25);
		}

		.tp-content a {
			display: block;
			width: 20%;
			background: rgba(0, 68, 255, 0.2);
			color: #fff;
			font-size: 16px;
			line-height: 30px;
			text-align: center;
			text-decoration: none;
			margin: 15px 2%;
			border: 3px solid rgba(0, 0, 0, .4);
			border-radius: 8px;
			display: flex;
			align-items: center;
			justify-content: center;
		}

		.tp-content a:hover {
			transition: all .3s;
			border-radius: 0;
			border-color: rgba(0, 0, 0, .9);
			background: rgba(243, 9, 153, 0.4);
		}

		.tp-content a img {
			width: 25px;
			height: 25px;
			margin-right: 6px;
			transform-origin: 50% 0;
			animation: zk 3s infinite ease;
		}

		@media screen and (max-width:1200px) {
			.tp-content a {
				width: 40%;
				margin: 15px 5%;
			}
		}

		@media screen and (max-width:980px) {
			.tp-content a {
				width: 40%;
			}
		}

		@media screen and (max-width:650px) {
			.tp-content a {
				width: 80%;
			}
		}

		.copyright {
			width: 100%;
			position: fixed;
			bottom: 0;
			width: 100%;
			text-align: center;
			font-size: 12px;
			color: #fff;
			line-height: 20px;
		}

		@keyframes zk {

			5%,
			25%,
			45% {
				transform: rotate(8deg);
			}

			0%,
			10%,
			30%,
			50% {
				transform: rotate(-8deg);
			}

			15%,
			35%,
			55% {
				transform: rotate(4deg);
			}

			20%,
			40%,
			60% {
				transform: rotate(-4deg);
			}

			65%,
			100% {
				transform: rotate(0deg);
			}
		}
	</style>
</head>

<body>
	<div class="tp-content">
		<a href="https://gitee.com/sherrykeeper/" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/gitee.png" />Gitee</a>
		<a href="https://github.com/sherrykeeper" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/github.svg" />GitHub</a>
		<a href="https://sherrykeeper.vip/music/" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90.svg" />Music</a>
		<a href="https://cp.anyknew.com/" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/copytool.png" />Copytool</a>
		<a href="https://pintia.cn/problem-sets/994805260223102976/problems/type/7" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/pta.svg" />PTA</a>
		<a href="https://pandao.github.io/editor.md/" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/markdown.svg" />在线MD编辑器</a>
		<a href="https://www.xd0.com/" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/%E5%B0%8F%E5%88%80.svg" />小刀</a>
		<a href="https://devdocs.io/" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/API.svg" />API文档合集</a>
		<a href="http://www.frontendjs.com/" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/%E5%89%8D%E7%AB%99.png" />前站导航</a>
		<a href="https://tool.oschina.net/commons?type=3" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/rgb.svg" />RGB颜色对照表</a>
		<a href="https://en.savefrom.net/102-youtube-music-downloader.html" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/youtube.svg" />Youtube Downloader</a>
		<a href="http://sherrykeeper.gitee.io/oss/" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/oss.svg" />Personal OSS</a>
		<a href="https://www.jiumodiary.com/" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/book.svg" />鸠摩搜书</a>
		<a href="https://hellogithub.com/" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/github.svg" />Hello GitHub</a>
		<a href="https://gitstar-ranking.com/" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/github.svg" />Gitstar Ranking</a>
		<a href="https://pasteme.cn/" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/pasteme.svg" />PasteMe</a>
		<a href="https://docs.microsoft.com/zh-cn/" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/microsoft.svg" />Microsoft Docs</a>
		<a href="https://www.liaoxuefeng.com/wiki/1022910821149312" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/write.svg" />廖雪峰</a>
		<a href="https://leetcode-cn.com/" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/leetcode.svg" />力扣</a>
		<a href="https://jinaconvert.com/cn/convert-to-ico.php" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/convert.svg" />Convert-to-icon</a>
		<a href="https://www.swiper.com.cn/api/parameters/42.html" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/API.svg" />Swipe API</a>
		<a href="https://docschina.org/" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/%E8%AE%BA%E5%9D%9B.svg" />印记中文</a>
		<a href="https://163.reinness.com/" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90.svg" />网易云音乐打卡</a>
		<a href="http://www.iocoder.cn/?bilibili&av70607575" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/Blog.svg" />芋道源码</a>
		<a href="https://objtube.github.io/front-end-roadmap/#/" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/Blog.svg" />前端学习路线</a>
		<a href="http://lackar.com/aa/" target="_blank"><img
				src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/search.svg" />AnywhereAnything</a>
		<a href="https://www.udemy.com/" target="_blank"><img src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/learn.svg" />Udemy</a>
		<a href="https://www.tiobe.com/tiobe-index/" target="_blank"><img src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/rank.svg" />编程语言Rank</a>
		<a href="https://docs.oracle.com/javase/8/docs/" target="_blank"><img src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/API.svg" />Java8 API</a>
		<a href="https://lab.github.com/" target="_blank"><img src="https://sherrykeeper.oss-cn-hangzhou.aliyuncs.com/icon/learn.svg" />Github Learning Lab</a>
	</div>
</body>


</html>

<script type="text/javascript" src="img/ThreeWebGL.js"></script>
<script type="text/javascript" src="img/ThreeExtras.js"></script>
<script type="text/javascript" src="img/Detector.js"></script>
<script type="text/javascript" src="img/RequestAnimationFrame.js"></script>
<script id="vs" type="x-shader/x-vertex">
	varying vec2 vUv;
	void main() {
		vUv = uv;
		gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
	}
</script>
<script id="fs" type="x-shader/x-fragment">
	uniform sampler2D map;
	uniform vec3 fogColor;
	uniform float fogNear;
	uniform float fogFar;
	varying vec2 vUv;
	void main() {
		float depth = gl_FragCoord.z / gl_FragCoord.w;
		float fogFactor = smoothstep(fogNear, fogFar, depth);
		gl_FragColor = texture2D(map, vUv);
		gl_FragColor.w *= pow(gl_FragCoord.z, 20.0);
		gl_FragColor = mix(gl_FragColor, vec4(fogColor, gl_FragColor.w), fogFactor);
	}
</script>
<script type="text/javascript">
	if (!Detector.webgl) Detector.addGetWebGLMessage();
	var canvas = document.createElement('canvas');
	canvas.width = 32;
	canvas.height = window.innerHeight;
	var context = canvas.getContext('2d');
	var gradient = context.createLinearGradient(0, 0, 0, canvas.height);
	gradient.addColorStop(0, "#1e4877");
	gradient.addColorStop(0.5, "#4584b4");
	context.fillStyle = gradient;
	context.fillRect(0, 0, canvas.width, canvas.height);
	document.body.style.background = 'url(' + canvas.toDataURL('image/png') + ')';
	var container;
	var camera, scene, renderer, sky, mesh, geometry, material, i, h, color, colors = [],
		sprite, size, x, y, z;
	var mouseX = 0,
		mouseY = 0;
	var start_time = new Date().getTime();
	var windowHalfX = window.innerWidth / 2;
	var windowHalfY = window.innerHeight / 2;
	init();
	animate();

	function init() {
		container = document.createElement('div');
		document.body.appendChild(container);
		camera = new THREE.Camera(30, window.innerWidth / window.innerHeight, 1, 3000);
		camera.position.z = 6000;
		scene = new THREE.Scene();
		geometry = new THREE.Geometry();
		var texture = THREE.ImageUtils.loadTexture(
			''
		);
		texture.magFilter = THREE.LinearMipMapLinearFilter;
		texture.minFilter = THREE.LinearMipMapLinearFilter;
		var fog = new THREE.Fog(0x4584b4, -100, 3000);
		material = new THREE.MeshShaderMaterial({
			uniforms: {
				"map": {
					type: "t",
					value: 2,
					texture: texture
				},
				"fogColor": {
					type: "c",
					value: fog.color
				},
				"fogNear": {
					type: "f",
					value: fog.near
				},
				"fogFar": {
					type: "f",
					value: fog.far
				},
			},
			vertexShader: document.getElementById('vs').textContent,
			fragmentShader: document.getElementById('fs').textContent,
			depthTest: false
		});
		var plane = new THREE.Mesh(new THREE.Plane(64, 64));
		for (i = 0; i < 8000; i++) {
			plane.position.x = Math.random() * 1000 - 500;
			plane.position.y = -Math.random() * Math.random() * 200 - 15;
			plane.position.z = i;
			plane.rotation.z = Math.random() * Math.PI;
			plane.scale.x = plane.scale.y = Math.random() * Math.random() * 1.5 + 0.5;
			GeometryUtils.merge(geometry, plane)
		}
		mesh = new THREE.Mesh(geometry, material);
		scene.addObject(mesh);
		mesh = new THREE.Mesh(geometry, material);
		mesh.position.z = -8000;
		scene.addObject(mesh);
		renderer = new THREE.WebGLRenderer({
			antialias: false
		});
		renderer.setSize(window.innerWidth, window.innerHeight);
		container.appendChild(renderer.domElement);
		document.addEventListener('mousemove', onDocumentMouseMove, false);
		window.addEventListener('resize', onWindowResize, false)
	}

	function onDocumentMouseMove(event) {
		mouseX = (event.clientX - windowHalfX) * 0.25;
		mouseY = (event.clientY - windowHalfY) * 0.15
	}

	function onWindowResize(event) {
		camera.aspect = window.innerWidth / window.innerHeight;
		camera.updateProjectionMatrix();
		renderer.setSize(window.innerWidth, window.innerHeight)
	}

	function animate() {
		requestAnimationFrame(animate);
		render()
	}

	function render() {
		position = ((new Date().getTime() - start_time) * 0.03) % 8000;
		camera.position.x += (mouseX - camera.target.position.x) * 0.01;
		camera.position.y += (-mouseY - camera.target.position.y) * 0.01;
		camera.position.z = -position + 8000;
		camera.target.position.x = camera.position.x;
		camera.target.position.y = camera.position.y;
		camera.target.position.z = camera.position.z - 1000;
		renderer.render(scene, camera)
	}
</script>